package com.gameapplet.PlayStatus.controller;

import com.gameapplet.PlayStatus.model.PlayStatus;
import com.gameapplet.PlayStatus.service.Impl.PlayStatusServiceImpl;
import com.gameapplet.ranklist.model.RankList;
import com.gameapplet.ranklist.service.IRankListService;
import com.gameapplet.util.GetUUID;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.HashMap;
import java.util.List;

/**
 * 小凤梨
 * 2018-06-22
 * 闯关类后台逻辑
 **/
@Controller
@RequestMapping("/playstatus")
public class PlayStutasController {
    @Resource(name = "playStatusServices")
    PlayStatusServiceImpl playStatusService;
    @Resource(name = "iRankListService")
    IRankListService iRankListService;

    /*
    * dsq
    * 练习结束返回数据
    * */
//    @RequestMapping(value = "/getplaystatus")
//    @ResponseBody
//    public HashMap<String,Object> playstatus( @RequestBody PlayStatus playStatus) {
//
//        HashMap<String,Object> map = new HashMap<String,Object>();
//        PlayStatus playStatusLast,playStatusNext,playStatusMe,playStatusStandby;
//        //用户本关最高分
//        PlayStatus playStatus1 = playStatusService.selectUserMax(playStatus.getOpenid(), playStatus.getStageid());
//        System.out.println(playStatus.getOpenid()+playStatus.getStageid());
//        playStatus.setPlayStatusid(GetUUID.getUUID());
////        List<RankList> list = iRankListService.selectStageRankList(playStatus.getStageid());
//
//        if(playStatus1!=null) {
//            //判断是否有记录以及修改历史最高分
//            System.out.println("playStatus.getThisScore()========"+playStatus.getThisScore()+
//                    "playStatus1.getThisScore()=================================="+playStatus1.getThisScore());
//            if (playStatus.getThisScore() >= playStatus1.getThisScore()) {
//                    playStatus.setIsMax(1);
//
//                playStatusMe = playStatus;
//                //保存用户闯关信息
//                playStatusService.savePlayStatus(playStatus);
//                //把旧记录的IsMax设置为0
//                playStatusService.updateismax(playStatus1.getOpenid(), playStatus1.getStageid(), playStatus1.getThisScore());
//
//                //查询上一名下一名分数记录
//                playStatusLast = playStatusService.selectLastStageRanklist(playStatusMe.getThisScore(), playStatusMe.getOpenid(),playStatusMe.getStageid());
//                playStatusNext = playStatusService.selectNextStageRanklist(playStatusMe.getThisScore(), playStatusMe.getOpenid(),playStatusMe.getStageid());
//            } else {
//                //记录本次成绩，返回排名
//              //  playStatus.setIsMax(1);//
//                playStatusMe = playStatus1;
//                playStatusService.savePlayStatus(playStatus);
//                playStatusLast = playStatusService.selectLastStageRanklist(playStatusMe.getThisScore(), playStatusMe.getOpenid(),playStatusMe.getStageid());
//
//                playStatusNext = playStatusService.selectNextStageRanklist(playStatusMe.getThisScore(), playStatusMe.getOpenid(),playStatusMe.getStageid());
//            }
//        }
//        else {
//
//            playStatus.setIsMax(1);
//
//            //playStatusMe = playStatus;
//            //保存用户闯关信息
//            playStatusService.savePlayStatus(playStatus);
//            playStatusMe = playStatus;
////查询上一名下一名分数记录
//            playStatusLast = playStatusService.selectLastStageRanklist(playStatusMe.getThisScore(), playStatusMe.getOpenid(),playStatusMe.getStageid());
//            playStatusNext = playStatusService.selectNextStageRanklist(playStatusMe.getThisScore(), playStatusMe.getOpenid(),playStatusMe.getStageid());
//        }
//        if(playStatusLast==null){
//            playStatusStandby = playStatusService.selectNextTwoStageRankList(playStatusMe.getThisScore(),playStatusMe.getOpenid(),playStatusMe.getStageid());
//            map.put("One",playStatusMe);
//            map.put("Two",playStatusNext);
//            map.put("Thrid",playStatusStandby);
//        }
//        else if(playStatusNext==null){
//            playStatusStandby = playStatusService.selectLastTwoStageRanklist(playStatusMe.getThisScore(),playStatusMe.getOpenid(),playStatusMe.getStageid());
//            map.put("One",playStatusStandby);
//            map.put("Two",playStatusLast);
//            map.put("Thrid",playStatusMe);
//        }
//        else {
//            map.put("One",playStatusLast);
//            map.put("Two",playStatusMe);
//            map.put("Thrid",playStatusNext);
//        }
//           //
//            playStatus.setCurrenstage(playStatusService.selectCurrentStage(playStatus.getOpenid()));//当前最大关
//
//        return map;
//    }
//    @RequestMapping("/test")
//    @ResponseBody
//    public PlayStatus test(){
//        PlayStatus playStatus = new PlayStatus();
//        playStatus.setOpenid("01");
//        playStatus.setPlayStatusid("111");
//
//        return playStatus;
//    }
    @RequestMapping(value = "/getplaystatus")
    @ResponseBody
    public HashMap<String, Object> test(@RequestBody PlayStatus playStatus){
        HashMap<String, Object> map = new HashMap<String, Object>();
        PlayStatus playStatusLast, playStatusNext, playStatusMe, playStatusStandby;
        //查询用户本关最高分
        PlayStatus playStatus1 = playStatusService.selectUserMax(playStatus.getOpenid(), playStatus.getStageid());
        System.out.println(playStatus.getOpenid() + playStatus.getStageid());
        playStatus.setPlayStatusid(GetUUID.getUUID());


//        List<RankList> list = iRankListService.selectStageRankList(playStatus.getStageid());

        if (playStatus1 != null){//如果用户本关有最高分，将本次最高分记录和上次记录比较
            //判断是否有记录以及修改历史最高分
            if (playStatus.getThisScore() >= playStatus1.getThisScore()){
                playStatus.setIsMax(1);
                playStatusMe = playStatus;
                //map.put("userstagemessage",playStatus);
                //保存用户闯关信息
                playStatusService.savePlayStatus(playStatus);
                //把旧记录的IsMax设置为0
                playStatusService.updateismax(playStatus1.getOpenid(), playStatus1.getStageid(), playStatus1.getThisScore());
                //查询上一名下一名分数记录
            } else {
                //记录本次成绩，返回排名
                //playStatusMe = playStatus1;
                playStatusService.savePlayStatus(playStatus);
            }
        }else{
            playStatus.setIsMax(1);
            //playStatusMe = playStatus;
            //保存用户闯关信息
            playStatusService.savePlayStatus(playStatus);
            playStatusMe = playStatus;
            //map.put("userstagemessage",playStatus);
        }
        int i = 1;
        List<RankList> list = iRankListService.selectStageTenRankList(playStatus.getStageid());//查询本关排行榜
        for(RankList rankList:list){

            rankList.setNum(i++);
            // System.out.println(rankList.getOpenid()+"=============="+playStatus.getOpenid());
            if(playStatus.getOpenid().equals(rankList.getOpenid())){
                //用户在排行榜的中的位置
                rankList.getNum();//用户本次排行
                playStatus.setNum(rankList.getNum());
                //用户本人排行榜
                if(rankList.getNum()-2>=0){//用户不是第一名保存用户上一名信息 用户第一名就不返回
                    map.put("lastranklist", list.get(rankList.getNum() - 2));
                }
                if(rankList.getNum()==list.size()){//用户在排行榜是最后一名,下一位返回null
                    map.put("nextranklist",null);
                }else {//用户不是最后一名 返回下一个
                    map.put("nextranklist",list.get(rankList.getNum()));
                }
            }
        }

        playStatus.setCurrenstage(playStatusService.selectCurrentStage(playStatus.getOpenid()));
//        if(playStatus.getCurrenstage()==null){
//            playStatus.setCurrenstage("1");//当前最大关
//        }

        map.put("userranklist",playStatus);
        // playStatus.setCurrenstage(playStatusService.selectCurrentStage(playStatus.getOpenid()));//当前最大关

        return  map;
    }
}
